VSIPL++: Intuitive Programming Using C++ Templates
نویسندگان
چکیده
VSIPL++ is a high-performance C++ toolkit for vector and signal processing applications. Building on the successful Vector, Signal, and Image Processing Library (VSIPL) standard (a C standard for similar applications), VSIPL++ adds additional features including: • direct support for parallel computation, • simpler syntax, improved type-checking, and other improvements to reduce validation and verification (V&V) costs, • support for specialized data storage formats, and • potentially higher performance. Programs built with VSIPL++ will be as fast or faster as hand-coded VSIPL programs, but require less effort to build and will automatically work in both serial and parallel environments. VSIPL++ includes all of VSIPL’s functionality, i.e., vector and matrix operations, signal processing functions, and linear algebra. VSIPL++ uses C++ to reduce the burden on programmers. For example, a matrix m is created by invoking the Matrix constructor, which automatically handles all necessary memory allocation. VSIPL++ also directly supports data-parallel programming. For example, a matrix having entries equal to the cosine of matrix m’s entries is denoted cos(m). The sum of two matrices can be assigned to a third using a data-parallel assignment m0 = m1 + m2, but the logically invalid sum of a Vector and a Matrix yields a compile-time error. The same syntax can be used to manipulate scalars, vectors, matrices, and tensors. In VSIPL++, in contrast to VSIPL, data may be stored in formats other than simple arrays of contiguous memory. Programmers use logical views of data. These views are manipulated as if they were contiguous arrays. Choosing an alternative storage format does not require the programmer to change the code that manipulates the memory. In addition, programmers may superimpose more than one view on the same data. For example, a programmer can have both a one-dimensional (vector) view and a two-dimensional (matrix) view of the same data. Alternative storage formats can reduce the use of memory (e.g., by storing only non-zero values), improve performance (e.g., by computing values lazily), or improve reliability (e.g., by replicating values and then using voting to determine the value stored). VSIPL++ supports distributed computation using the single-program, multiple data model. Programmers specify data distribution when containers are created, but all other portions of the program are written the same for serial and parallel programs. VSIPL++ automatically distributes the computations across processors. This style of programming greatly reduces validation and verification costs by permitting debugging on serial machines and by confining the complex, error-prone task of writing parallel code to the toolkit itself. VSIPL++ makes use of C++ templates to provide intuitive syntax while generating highly efficient code. For example, the use of novel data storage formats does not impose any additional overhead on programs that use traditional data formats, nor do users of the novel data storage formats pay additional costs relative to hand-coded programs using the traditional data formats. A draft version of the VSIPL++ specification is available and work on a reference implementation is underway. We anticipate that the complete specification and a complete reference implementation will be available by the end of 2003.
منابع مشابه
VSIPL++Pro – A High-Performance VSIPL++ Implementation
VSIPL++ achieves high-performance through both the efficiency of C++ as a systems language, and by using C++ features for high-performance generic programming to convert domain-level abstractions into efficient code at compile time. The VSIPL++ API allows for early binding of computation and communication, allowing setup for complex functions and communications to be done early, out of critical...
متن کاملGPU VSIPL: Core and Beyond
GPU VSIPL is an implementation of the Vector Signal Image Processing Library (VSIPL) and provides a librarybased solution to developing GPU-accelerated numerical applications. GPU VSIPL now supports much of the VSIPL Core Profile as well as element-wise matrix operators corresponding to required vector operators. This is nearly a five-fold increase in function count since GPU VSIPL was first in...
متن کاملExploiting VSIPL and OpenMP for Parallel Image Processing
VSIPL and OpenMP are two open standards for portable high performance computing. VSIPL delivers optimized single processor performance while OpenMP provides a low overhead mechanism for executing thread based parallelism on shared memory systems. Image processing is one of the main areas where VSIPL and OpenMP can have a large impact. Currently, a large fraction of image processing applications...
متن کاملVSIPL++: A Signal Processing Library Scaling with Moore’s Law
VSIPL++ [1, 2] is the object-oriented successor to the Vector Signal and Image Processing Library (VSIPL) [23]. Like VSIPL, VSIPL++ specifies an Application Programming Interface (API) for use in the development of high-performance numerical applications, with a particular focus on embedded real-time systems performing signal processing and image processing. Its API is designed for performance,...
متن کاملOptimization of Memory Allocation in VSIPL
In this paper, we propose an efficient memory allocation algorithm for Vector, Signal, and Image Processing Library (VSIPL) standard. This algorithm improves the efficiency of key VSIPL functions by exploiting fundamental properties of VSIPL objects during the allocation of memory. We implemented and tested our algorithm using the VSIPL reference implementation and measured results on represent...
متن کامل